package com.cskaoyan.javse.oop3._2inner._2static._1basic;

/**
 * @description: 静态成员内部类的访问特点
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 两个需要注意的地方:
 *      1.内部类和外围类之间的访问不受访问权限限制
 *      2.静态内部类对象和外围类对象不会互相依赖
 *          如果想要访问谁的成员,那就创建谁的对象
 *
 *
 * > 静态内部类的访问特点
 *
 *- 静态内部类内部访问外围类
 *      不管是静态方法还是成员方法,都没有外围类对象,需要直接创建它的对象
 *      创建好对象以后,用对象名访问即可
 *
 * - 外围类访问静态内部类成员
 *      不管是静态方法还是成员方法,都没有内部类对象,需要直接创建它的对象
 *      创建好对象以后,用对象名访问即可
 *
 * - 外部类访问静态内部类成员（了解）
 *      首先要考虑权限,有权限才能创建
 *      其次它们之间的访问要受访问权限限制
 *      最后,只需要直接创建静态内部类对象即可
 *      这时,需要注意
 *      在外部类中,创建静态内部类对象,需要明确指出该静态内部类属于哪个外围类
 *      语法: 外围类类名.静态内部类类名
 *
 * - 静态内部类访问外部类成员（了解）
 *      创建对象即可,受访问权限限制
 *
 */
public class Demo {
    public static void main(String[] args) {
        EnclosedClazz.StaticClazz ecsc = new EnclosedClazz.StaticClazz();
        //System.out.println(ecsc.a);
    }
}

class EnclosedClazz {
    private int a;
    static int b = 10;
    static final int C = 20;

    static void testStatic() {
        //直接创建静态内部类对象即可
        StaticClazz sc = new StaticClazz();
        System.out.println(sc.a);
    }

    void test() {
        //直接创建静态内部类对象即可
        StaticClazz sc = new StaticClazz();
        System.out.println(sc.a);
    }


    //静态内部类
    static class StaticClazz {
        private int a;
        static int b = 100;
        static final int C = 200;

        static void testStaticInner() {
            //直接创建外围类对象
            EnclosedClazz ec = new EnclosedClazz();
            System.out.println(ec.a);
        }

        void testInner() {
            //直接创建外围类对象
            EnclosedClazz ec = new EnclosedClazz();
            System.out.println(ec.a);
        }


    }
}
